The use of server-based applications for remote clients over a network has become ubiquitous. With the widespread use of diverse server applications, different needs for devices such as a network interface controller to facilitate data received through the network to the server have arisen. The function of such a network interface controller is to process a direct memory access (DMA) to store received packets over the network and notify the host processor via an interrupt of the stored information. Since interrupts are computationally expensive, it is desirable to interrupt a processor on a server only when necessary and network interface controllers are designed to optimize this process.
Currently, the DMA is the method by which a host processor accesses stored network packets after receiving interrupts from the network interface controller of a network traffic management device. The DMA of a packet to the host processor involves the network interface controller writing a received packet into a packet buffer area in the host memory in which the host processor accesses the host memory to retrieve information contained in the received data packets. The packet buffer is randomly accessible by the host processor, but requires greater processing resources and is generally a slower access because the packet buffer area is typically DRAM. Typically, a descriptor with a pointer to the packet buffer area is written into a ring buffer area, whereby the ring buffer area is smaller than the packet buffer area and allows for faster access by the host processor. Once the descriptor is written into the ring buffer area, the host processor is notified and the host processor then reads the descriptor in the ring buffer area to retrieve the packet buffer pointer. The host processor then reads the stored data packet from the location, indicated by the pointer, in the packet buffer area and reads the contents of the data packet.
Packets received and processed by the host processor are frequently TCP packets, many of which generally contain only connection state information and have no payload or attached data. Such TCP packets are typically SYN, ACK, FIN and RESET packets. A TCP packet having connection state information, which includes a few flags and fields, is very small relative to the overall size of a TCP packet with attached payload data. Current systems which handle packets with connection state information as well as packets with payload data are inefficient because the host processor cannot distinguish between the two different types of packets. This results in the host processor having to access the descriptor in the ring buffer area and then access the packet buffer area in order to just to receive the connection state information in many TCP packets. This results in a significant use of computational and processing resources for the host processor to access the packet buffer area to only process connection state information of a TCP packet. The inefficiency is compounded by the fact that the access to the packet buffer area is likely to be a CPU cache miss resulting in an expensive DRAM memory access.